home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 158_01 / qeadds < prev    next >
Text File  |  1987-10-10  |  8KB  |  264 lines

  1. /*  VERSION 0001  (DATE: 28/09/86)  (TIME: 19:44)  */
  2. /*
  3.     e screen editor
  4.  
  5.     (C) G. Nigel Gilbert, MICROLOGY, 1981
  6.  
  7.     August-December 1981
  8.  
  9.         Modified:  October 1984 by J.W. Haefner  Logan, UT (USA)
  10.  
  11.     FILE: qeadds
  12.  
  13.     FUNCTIONS: terminal,gotoxy,deleteline,linedelete,delpage,
  14.             insertline,begdim,enddim,keytranslate,displayhelp
  15.  
  16.     PURPOSE: terminal dependent screen control functions
  17.  
  18.     NOTE this file is specific to the ADDS Viewpoint 3A+ terminal.
  19.     It may be used as a model for others
  20. */
  21.  
  22. #include "qe.h"
  23.  
  24. /* control key codes, here for convenience in defining terminal sequences*/
  25.  
  26. #define CTRLA    0x01    /*    SOH */
  27. #define CTRLB    0x02    /*    STX */
  28. #define CTRLC    0x03    /*    ETX */
  29. #define CTRLD    0x04    /*    EOT */
  30. #define CTRLE    0x05    /*    ENQ */
  31. #define CTRLF    0x06    /*    ACK */
  32. #define CTRLG    0x07    /*    BEL */
  33. #define CTRLH    0x08    /*    BS  */
  34. #define CTRLI    0x09    /*    HT  */
  35. #define CTRLJ    0x0a    /*    LF  */
  36. #define CTRLK    0x0b    /*    VT  */
  37. #define CTRLL    0x0c    /*    FF  */
  38. #define CTRLM    0x0d    /*    CR  */
  39. #define CTRLN    0x0e    /*    SO  */
  40. #define CTRLO    0x0f    /*    SI  */
  41. #define CTRLP    0x10    /*    DLE */
  42. #define CTRLQ    0x11    /*    DC1 */
  43. #define CTRLR    0x12    /*    DC2 */
  44. #define CTRLS    0x13    /*    DC3 */
  45. #define CTRLT    0x14    /*    DC4 */
  46. #define CTRLU    0x15    /*    NAK */
  47. #define CTRLV    0x16    /*    SYN */
  48. #define CTRLW    0x17    /*    ETB */
  49. #define CTRLX    0x18    /*    CAN */
  50. #define CTRLY    0x19    /*    EM  */
  51. #define CTRLZ    0x1a    /*    SUB */
  52. #define SOH    0x01
  53. #define STX    0x02
  54. #define ETX    0x03
  55. #define EOT    0x04
  56. #define ENQ    0x05
  57. #define ACK    0x06
  58. #define BEL    0x07
  59. #define BS     0x08
  60. #define HT     0x09
  61. #define LF     0x0a
  62. #define VT     0x0b
  63. #define FF     0x0c
  64. #define RETURN     0x0d
  65. #define SO     0x0e
  66. #define SI     0x0f
  67. #define DLE    0x10
  68. #define DC1    0x11
  69. #define DC2    0x12
  70. #define DC3    0x13
  71. #define DC4    0x14
  72. #define NAK    0x15
  73. #define SYN    0x16
  74. #define ETB    0x17
  75. #define CAN    0x18
  76. #define EM     0x19
  77. #define SUB    0x1a
  78. #define ESC     0x1b
  79. #define FS      0x1c
  80. #define GS      0x1d
  81. #define RS      0x1e
  82. #define US      0x1f
  83. #define DEL     0x7f
  84.  
  85. /*-------------------------OUTPUT TO SCREEN---------------------------*/
  86.  
  87.  
  88.  
  89. /* screen control characters for ADDS Viewpoint 3A+ */
  90. #define BEGINDIM '('
  91. #define ENDDIM ')'
  92. #define CRSADDR '='
  93. #define INSLINE 'E'
  94. #define DELLINE 'T'    /*delete to spaces*/
  95. #define LINDEL 'R'    /*delete and close up*/
  96. #define PAGEDEL 'Y'
  97.  
  98. terminal()    /*display name of terminal*/
  99. {
  100.     puts("|for ADDS Viewpoint 3A+ (WordStar)");
  101. }
  102.  
  103. gotoxy(x,y)    /*move cursor to column x, line y {top left is (0,0) */
  104. int x,y;
  105. {
  106.     putch(ESC);
  107.     putch(CRSADDR);
  108.     putch(y+32);
  109.     putch(x+32);
  110. }
  111.  
  112. deleteline(x,y)    /*clear to spaces all characters on line y from column x
  113.             to the right edge of the screen, inclusive.
  114.             Leave cursor on left most blank */
  115. int x, y;
  116. {
  117.     gotoxy(x,y);
  118.     putch(ESC);
  119.     putch(DELLINE);
  120.     gotoxy(x,y);
  121.  
  122. }
  123.  
  124. /*  FOLLOWING SUBROUTINE NOT USED: COMMENTED OUT
  125.  
  126. linedelete(y)    /*delete the line y.  All following lines move up one.
  127.             Leave cursor at start of line y */
  128. int y;
  129. {
  130. /*    gotoxy((SWIDTH+1),(SHEIGHT+1));*/
  131. /*    gotoxy(0,y);
  132.     deleteline(0,y);
  133. */
  134. /*    gotoxy(0,SHEIGHT+1);
  135.     putch(LF);
  136.     gotoxy(0,0);
  137.     deleteline(0,0);
  138.     gotoxy(cursorx,cursory);
  139. */
  140.     deleteline(0,y);
  141.     adputpage(cline,cursory);
  142.     
  143. }
  144. */
  145.  
  146. delpage(y)    /*clear to spaces line y and all following lines.  Leave
  147.             cursor at the start of line y */
  148. int y;
  149. {
  150.     gotoxy(0,y);
  151.     putch(ESC);
  152.     putch(PAGEDEL);
  153. }
  154.  
  155. /*    FOLLOWING SUBROUTINE NOT USED:  COMMENTED OUT */
  156. insertline()    /*move all lines below line on which cursor is, down one,
  157.             losing last line.  New cursor line is blank, with
  158.             cursor at start of line */
  159. {
  160. /*
  161.     putch(ESC);
  162.     putch(INSLINE);
  163. */
  164. }
  165. /* NOT YET */
  166.  
  167. begdim()    /*display all subsequent characters at half intensity*/
  168. {
  169.     putch(ESC);
  170.     putch(BEGINDIM);
  171. }
  172.  
  173. enddim()    /* display all subsequent characters at full intensity */
  174. {
  175.     putch(ESC);
  176.     putch(ENDDIM);
  177. }
  178.  
  179.  
  180. /*----------------------INPUT FROM KEYBOARD-----------------------------*/
  181.  
  182.  
  183. keytranslate()    /*defines the terminal key codes which perform
  184.             the editor commands */
  185. {
  186. /* each tran[xxxx]= should be set to the code emitted by the terminal
  187. key which will perform the indicated action.  The recommended (control)
  188. key assignments are shown in round brackets.
  189.     Some terminals precede their codes by a lead-in character
  190. (eg the Hazeltine uses the tilde).  This char should be assigned to
  191. tran[LEADIN].  If there is no lead-in character, set tran[LEADIN] to zero.
  192.     'e' will ignore the leadin character if tran[LEADIN] is non-zero,
  193. but will set the parity bit on the next character. All other chars from the
  194. keyboard will already have any parity bits removed as they are read in.  Thus
  195. codes with lead-ins should be entered in the table below as code+0x80, or
  196. more clearly, as code+PARBIT.
  197.     For example, suppose that one is coding the Hazeltine 1420, which
  198. generates a tilde,^L (0x0d) sequence when the cursor up key is pressd.  To
  199. recognise this sequence, set tran[LEADIN] to tilde (0x7e) and set
  200. tran[UPKEY] to 0x0d+PARBIT.
  201. */
  202.  
  203.     tran[LEADIN]=0;        /*lead-in character, 0 if not used*/
  204.     tran[DOWNKEY]= CTRLX;    /*cursor down */
  205.     tran[UPKEY]= CTRLE;    /*cursor up*/
  206.     tran[LEFTKEY]= CTRLS;    /*cursor left*/
  207.     tran[RIGHTKEY]= CTRLD;    /*cursor right*/
  208.     tran[RIGHTWKEY]= CTRLF;    /*cursor right one word (F) */
  209.     tran[LEFTWKEY]= CTRLA;    /*cursor left one word (A) */
  210.     tran[EOLKEY]= CTRLP;    /*cursor to end of line (P) */
  211.     tran[BOLKEY]= CTRLO;    /*cursor to beginning of line (P) */
  212.     tran[UPPAGE]= CTRLR;    /*scroll up a page (R) */
  213.     tran[DOWNPAGE]= CTRLC;    /*scroll down a page (C) */
  214.     tran[BOFKEY]= CTRLU;    /*cursor to beginning of file (U) */
  215.     tran[HOMEKEY]= CTRLB;    /*cursor to end of file (B) */
  216.     tran[DELLEFT]= 0x7f;    /*delete char to left of cursor (DEL) */
  217.     tran[DELRIGHT]= CTRLG;    /*delete char under cursor (G) */
  218.     tran[DELLNKEY]= 0x1C;    /*delete cursor line (^\) */
  219.     tran[DELWDKEY]= CTRLT;    /*delete word to right of cursor (T) */
  220.     tran[JUMPKEY]= CTRLJ;    /*jump to (J) */
  221.     tran[CRSTILL]= CTRLN;    /*insert newline after cursor (N) */
  222.     tran[QWIKKEY]= CTRLQ;    /*quit (Q) */
  223.     tran[SCRLDNKEY]= CTRLZ;    /*scroll line down (Z) */
  224.     tran[TOPSCRKEY]= CTRLY;    /*top of screen (Y) */
  225.     tran[BOTSCRKEY]= CTRLV;    /*bottom of screen (V) */
  226.     tran[BLOCKKEY]= CTRLK;    /*block operations (K) */
  227.     tran[SCRLUPKEY]= CTRLW;    /*scroll line up (W) */
  228.     tran[REPKEY]= CTRLL;    /*repeat last find/alter (L) */
  229.     /*tran[HELPKEY]= 0x1e;*/    /*display help menu (^^) */
  230.     tran[UNDELINE]=0x1e;    /*restore deleted line (^^) */
  231.     tran[OOPSKEY]= 0x1f;    /*restore unedited line (^_) */
  232.     tran[TAB]= CTRLI;        /*tab (I) */
  233.     tran[RETRIEVE]= CTRLL;    /*retrieve (L)*/
  234.     tran[CR]= 0x0d;        /*return*/
  235.     tran[ESCKEY]=0x1b;    /*escape, the magic key (ESC)*/
  236. }
  237.  
  238. /*-------------------------------HELP MENU-------------------------------*/
  239.  
  240.  
  241. displayhelp()    /*display the help menu.  There must be (helplines-1)
  242.             lines of menu here (see terminal function,above) */
  243. /*    OLD HELP
  244. {
  245.     puts("CURSOR:  ^B|=beginning of line|  ^S|=left word|  ^D|=right word|  ^E|=end of line|\n");
  246.     puts("MOVE:    ^W|=up a screen|        ^Z|=down a screen|  ^U|=top,|  HOME|=bottom of file|\n");
  247.     puts("FIND:    ^F|=find|               ^R|=repeat last find/alter|    ^A|=alter|\n");
  248.     puts("DELETE:  DEL|=char left|         ^G|=char right|     ^T|=word|    ^Y|=line|  ^\\|=oops\n");
  249.     puts("   ^     ^Q|=quit|  ^P|=read file| ^O|=write,print,shift,move,copy,or delete blOck\n");
  250.     puts(" <- ->   ^X|=jump to line|  ^N|=iNsert a new line   |^C|=context |^V|=view menu off/on|\n");
  251.     puts("---v------------------------------------------------------------------------");
  252. }
  253. */
  254. {
  255.     puts("LEFT:|   chr=|^S,^H| word=|^A| line=|^O     RIGHT:| chr=|^D|  word=|^F| line=|^P\n");
  256.     puts("UP:|     scroll=|^W| line=|^E| page=|^R     TOP:|   scrn=|^Y| file=|^U\n");
  257.     puts("DOWN:|   scroll=|^Z| line=|^X| page=|^C     BOT:|   scrn=|^V| file=|^B\n");
  258.     puts("DELETE:| chr-rt=|^G| chr-lf=|DEL| word=|^T| line=|^\\| EOL=|^QY      RESTORE: ^_\n");
  259.     puts("SEARCH:| find=|^QF| replace=|^QA   REPEAT: ^L  JUMP: ^J|n (repeat=|^KJ|)| REFORM:^QP\n");
  260.     puts("BLOCK:|  quit=|^KQ| save=|^KX| read=|^KR| moves=|^KB  STATUS:^QK  HELP:^QO\n");
  261.     puts("----------------------------------------------------------